# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：HelloWorld
#   文件名：4.8 range函数.py
# 开发时间：2021/3/22 14:57

# range()是一个函数，用来生成一个自然数的序列
r1 = range(5)  # 生成一个[0,1,2,3,4]这样的序列
r2 = range(0, 10, 2)  # range函数有3个参数
# r3 = range(起始索引, 结束索引, 步长)
# 该函数需要3个参数
#     1.起始位置（可以省略，默认是0）
#     2.结束位置（不可省略）
#     3.步长（省略时，默认为1, 非0非负数）
print(list(r2))

# 通过range()可以创建一个执行指定次数的for循环，range()实质上也是一个序列
for i in range(5):
    print(i)
# for循环除了创建方式以外，其余都与while循环一样，包括else、包括break continue都可以在for循环中使用
# 并且for循环使用也更加简单

# 课后练习：将之前（3.4while循环）做的操作，现在用for循环操作一遍
for s in 'hello':
    print(s)

# 练习1 求100以内所有奇数之和
sum_str = "100以内所有奇数之和 = sum "
sum_js = 0
for i in range(100):
    if i % 2 != 0:
        sum_js += i
        sum_str += '+' + str(i)
    else:
        continue
print(sum_str, '=', sum_js)

# 练习2 求100以内所有7倍数之和，以及个数
str_7 = '100以内所有7倍数之和 = sum '
sum_7 = 0
count_7 = 0
for i in range(100):
    if i % 7 == 0 and i >= 7:
        count_7 += 1
        sum_7 += i
        str_7 += '+' + str(i)
    else:
        continue
print(str_7, '=', sum_7, '7倍数的个数：', count_7)

# 练习3 # 求1000以内所有的水仙花数"Narcissus_few"
# 水仙花数是指一个n位数(n>=3),他的每个位上的数字的n次幂之和等于他本身
# 水仙花数，n>=3, abc=a^3+b^3+c^3
str_Nf = '1000以内所有水仙花数： '
for i in range(99, 1000, 1):
    i_a = int(i / 100)
    i_b = int((i - i_a * 100) / 10)
    i_c = int(i - i_a * 100 - i_b * 10)
    if i == i_a ** 3 + i_b ** 3 + i_c ** 3:
        str_Nf += str(i) + ' '
    else:
        continue
print(str_Nf)


# 练习4 获取用户输入的任意数，判断其是否是质数
# 这里直接改题目输入100以内的质数
str_zs = '100以内的质数: '
count_zs = 0
for i in range(2, 100, 1):
    flag = True
    for j in range(2, i, 1):
        # i能被j整除，i不是质数，立即排除此i，跳出子循环
        if i % j == 0:
            flag = False
            break
        # 不能被此数整除，试验下一位j
        j += 1
    # 如果已经确定为质数，记录该i为质数
    if flag:
        str_zs += str(i) + ' '
        count_zs += 1
    i += 1
print(str_zs, '\n质数数量：', count_zs)

